<?php
/*
 * Initialisation d'une partie
 * 
 * ex : /cartine/selector/init/?cards=["carte_0","carte_0"]
 * 
 */
// Vérification du joueur connecté
if(!isset($_SESSION['playerId'])){
	throw new Exception('Merci de vous authentifier.', HTTP_UNAUTHORIZED);
}

$playerId = $_SESSION['playerId'];

//Vérification des cartes possédés
if(!is_file(DIR_PLAYER . $_SESSION['playerId'])){
	throw new Exception('Votre compte ne possède aucune carte.', HTTP_NOTFOUND);
}
$player = unstore(DIR_PLAYER . $_SESSION['playerId']);
$playerDeck = $player['deck'];

//Vérification du format du tableau de cartes
$cards = json_decode(validGet('cards'));
if($cards === null){
	throw new Exception('Erreur dans le format des cartes.', HTTP_BADREQUEST);
}

//Vérification du nombre de cartes à jouer
if(count($cards) !== max((int)ceil((CELL * CELL)/2), CELL)){
	throw new Exception(sprintf('Merci de selectionner un nombre de carte acceptable (%s au lieu de %s).', max((int)ceil((CELL * CELL)/2), CELL), count($cards)), HTTP_BADREQUEST);
}

//Vérification que le joueur possède ces cartes
if(!checkPlayerCards($cards, $playerDeck)){
	throw new Exception('Merci de selectionner des cartes que vous possédez.', HTTP_BADREQUEST);
}

/*
 * Genère une nouvelle partie
 */
//Generation d'un id aléatoire 
$gameId = $_SESSION['gameId'] = sha1(uniqid('',true).'_'.mt_rand());
gamelog(sprintf('[%s] Une nouvelle partie démarre', $gameId));

// Mise en quarantaine des cartes du joueur
$player['deck']  = blockPlayerCards($cards, $playerDeck);
$player['blocked'][$gameId] = $cards;

// Mise à jour des infos du joueur
store(DIR_PLAYER . $_SESSION['playerId'], $player);


$game = array();
$reset = true;
$randomDeck = getRandomDeck((CELL * CELL) / 2 + CELL, $cardCollection);
$players = array($playerId    => array('color' => 'blue',  'deck'  => $cards, 'original' => $cards, 'type' => 'human')
     			,CPU_ID	   	  => array('color' => 'red',   'deck'   => $randomDeck, 'original' => $randomDeck, 'type' => 'cpu')
//     			,'eric'	   	  => array('color' => 'green', 'deck' => getRandomDeck((CELL * CELL) / 2 + CELL, $cardCollection), 'type' => 'cpu')
//     			,'polo'	   	  => array('color' => 'pink',  'deck'  => getRandomDeck((CELL * CELL) / 2 + CELL, $cardCollection), 'type' => 'cpu')
     			);

$game = array("board"      => array_fill(0, CELL * CELL, 'default') // Construction de la grille vide
		     ,"playerTurn" => array_rand ($players, 1) // Détermination du premier joueur
		     ,"players"    => $players	 
		     ,"author"     => $playerId  // Créateur de la partie
			 ,"endOfGame"  => 0
			 ,"id"         => $gameId
			 ,"active"     => true
             );


//Enregistrement de la partie
saveGame($game);

//Affichage au client
echo displayGameToClient($game);


